package com.java8.stream;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * <p>
 * java  stream抽象流
 * </p>
 *
 * @author whp
 * @since 2021/2/8
 */
public class StreamDemo {
    //java8 添加一个新的抽象；叫Stream 流 ，可以让你以一种声明的方式处理数据

    //内部迭代
    //以前对集合的迭代都是通过Iterator 或者 foreach 显式的在集合外部；这叫外部迭代
    //stream 提供内部迭代，通过访问者模式（vistor）实现

    //生成流方式  -- stream() 创建串行流 ; --paralleStream() 并行流

    public static void stream() {
        List<String> strings = Arrays.asList("12", "fsd", "abvc", "dbf");
        List<String> result = strings.stream().filter(str -> !str.startsWith("12")).collect(Collectors.toList());
        System.out.println(result);
    }

    public static void foreach() {
        List<String> strings = Arrays.asList("12", "fsd", "abvc", "dbf");
         strings.stream().forEach(str -> System.out.println(str));
    }
    public static void map() {
        List<Integer> strings = Arrays.asList(1,3,5,-3,9);
        strings.stream().map(a->Math.abs(a)).distinct().forEach(str-> System.out.println(str));
    }


    /*
     * @Description: TODO
     * @Param: 并行处理
     * @return void
     **/
    public static void parallel(){
        List<Integer> strings = Arrays.asList(1,3,5,-3,9,2,6,8);
        int num= (int) strings.parallelStream().filter(str->str%2==0).count();
        System.out.println(num);

    }


    public static void main(String[] args) {
     //   stream();
        //foreach();
        //map();
        parallel();
    }
}
